package com.ganzalang.gmall.designstrategy.discount.calculate;

import com.ganzalang.gmall.designstrategy.dto.DiscountCalculateDTO;
import lombok.extern.slf4j.Slf4j;

/**
 * @description: 折扣计算基类(公共逻辑写具体实现，各自特性的逻辑做抽象，交由实现类做具体实现)
 * @author: ganzalang
 */
@Slf4j
public abstract class AbstractDiscountCalculator implements DiscountCalculator{

    @Override
    public DiscountCalculateDTO calculate() {
        DiscountCalculateDTO discountCalculateDTO = new DiscountCalculateDTO();

        //对各个渠道的折扣码进行特殊处理
        Boolean flag = doSomething();

        //如果需要继续计算,则计算结果,否则直接返回
        if(flag){
            serviceA();
            serviceB();
        }

        return discountCalculateDTO;
    }

    public Boolean doSomething() {
        // 做逻辑处理
        log.info("相同逻辑的方法");
        return true;
    }

    /**
     * 每种折扣类型都有自己的具体实现
     */
    protected abstract void serviceA();

    /**
     * 每种折扣类型都有自己的具体实现
     */
    protected abstract void serviceB();


}
